package router

import (
	"GolangStudyBasic/20_Gin/demo/controllers"
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

// 这是一个中间件函数，它将在每个请求之前执行
func LoggerMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 在这里可以记录请求信息
		println("Request received:", c.Request.URL.Path)

		// 调用下一个中间件或处理程序
		c.Next()

		// 在这里可以记录响应信息
		println("Response sent:", c.Writer.Status())
	}
}

func Router(r *gin.Engine) *gin.Engine {
	// 使用 .Use 方法注册中间件
	r.Use(LoggerMiddleware())

	demo := r.Group("/gindemo")
	{
		// 定义路由
		demo.GET("/ping", func(ctx *gin.Context) {
			ctx.String(http.StatusOK, "Pong!")
		})
		demo.GET("/helloWorld", func(ctx *gin.Context) {
			ctx.JSON(http.StatusOK, gin.H{
				"info": "helloWorld",
			})
		})
	}
	// 自定义路由组
	user := r.Group("/gindemo/user/")
	{
		// Get url: /gindemo/user/info/1/James Harden
		user.GET("/info/:userId/:userName", controllers.UserController{}.GetUserInfo)
		// Get url: /gindemo/user/info?userId=xxx&userName=xxx
		user.GET("/info", func(ctx *gin.Context) {
			userId := ctx.Query("userId")
			userName := ctx.Query("userName")
			fmt.Println(userId, userName)
			ctx.JSON(http.StatusOK, gin.H{
				"userId":   userId,
				"userName": userName,
			})
		})
		user.GET("/getList", controllers.UserController{}.GetList)
	}
	order := r.Group("/gindemo/order/")
	{
		order.POST("/getOrderInfo", controllers.OrderController{}.GetOrderInfo)
		order.GET("/getList", controllers.OrderController{}.GetList)
	}
	// 启动服务器
	r.Run(":8080")
	return r
}
